public class ShapeTest {
    public static void main(String[] args) {
        // 创建一个正方形对象
        Square square = new Square(5.0);
        // 创建一个圆形对象
        Circle circle = new Circle(3.0);

        // 访问权限示例：可以在测试类中直接访问正方形和圆形对象的方法，因为它们的方法在子类中是public的（继承自父类的抽象方法默认是public的）

        // 计算正方形的面积和周长并输出
        System.out.println("正方形的面积: " + square.area());
        System.out.println("正方形的周长: " + square.rect());

        // 计算圆形的面积和周长并输出
        System.out.println("圆的面积: " + circle.area());
        System.out.println("圆的周长: " + circle.rect());

        // 对象类型转换示例：将Shape类型的对象转换为具体的子类类型，以便调用子类特有的方法（这里假设没有特有的方法只是演示类型转换）
        Shape shape1 = square;
        Shape shape2 = circle;

        if (shape1 instanceof Square) {
            Square square1 = (Square) shape1;
            System.out.println("转换后的正方形面积: " + square1.area());
        }

        if (shape2 instanceof Circle) {
            Circle circle1 = (Circle) shape2;
            System.out.println("转换后的圆面积: " + circle1.area());
        }

        // 创建一个圆柱体对象，底面为圆形
        Cylinder cylinder = new Cylinder(circle, 10.0);
        // 计算圆柱体的体积并输出
        System.out.println("圆柱体的体积: " + cylinder.volume());
    }
}